#ifndef PLUGIN_DATABLOCK_H
#define PLUGIN_DATABLOCK_H

#include <QWidget>
#include "../../IPlugin.h"

#include <QDebug>
#include <QEvent>
#include <QTimer>
// #include <QPropertyAnimation>
#include <QList>
#include <QScrollBar>
#include <QScroller>
#include "ui_plugin_datablock.h" // 包含生成的UI头文件
#include "datablock_manager.h"
QT_BEGIN_NAMESPACE
namespace Ui
{
    class plugin_datablock;
}
QT_END_NAMESPACE

class plugin_datablock : public IPlugin
{
    Q_OBJECT
    Q_INTERFACES(IPlugin)
    Q_PLUGIN_METADATA(IID "com.example.IPlugin/1.0" FILE "plugin_datablock.json")

public:
    QString pluginName() const override { return "plugin_datablock"; }
    QString version() const override { return "1.0"; }

    QWidget *createUI(QWidget *parent) override
    {
        pluginWidget = new QWidget(parent);
        plugin_datablock_ui = new Ui::plugin_datablock();    // 创建UI实例
        plugin_datablock_ui->setupUi(pluginWidget);          // 设置UI到widget
        pluginWidget->setAttribute(Qt::WA_StyledBackground); // 添加样式背景支持
        return pluginWidget;
    }
    void sendMessageToPlugin(const QString &msg) override;
    ~plugin_datablock()
    {
        delete plugin_datablock_ui; // 确保释放内存
    }

    // protected:
    //     bool event(QEvent *event) override; // ✅ 添加了声明
private:
    Ui::plugin_datablock *plugin_datablock_ui = nullptr; // UI指针成员
    QWidget *pluginWidget;
    int scrollDirection;
    // 添加各种传感器阈值成员变量
    double m_temperatureThreshold = 75.0;         // 普通温度阈值 (tempLimit_cd)
    double m_internalTemperatureThreshold = 75.0; // 柜内温度阈值 (tempLimit_hj)
    double m_humidityThreshold = 85.0;            // 柜内湿度阈值 (humLimit_hj)
    double m_ultrasonicThreshold = 35.0;          // 超声波阈值 (dbLImit_cs)
    double m_tevThreshold = 45.0;                 // 暂态地电压阈值 (dbLImit_zt)

    void setTemperatureThreshold(double threshold);
    void setInternalTemperatureThreshold(double threshold);
    void setHumidityThreshold(double threshold);
    void setUltrasonicThreshold(double threshold);
    void setTEVThreshold(double threshold);

    // QTimer *autoScrollTimer;                         // 自动滚动定时器
    // bool isUserInteracting;                          // 是否正在交互（触摸）
    // void autoScroll();                               // 自动滚动函数
    void processJsonCommand(const QString &jsonStr); // 解析json命令并处理
    void updateDataMap();                            // 根据map筛查比较差异并更新map
    void updateLayout();                             // 更新ui布局,做了布局
    void initUi();
    QList<QPair<QString, QList<QPair<QString, DataBlock>>>> m_dataBlockMap_pre; // 备份表,当新表生成后,需要对比旧表进行处理
    QList<QPair<QString, QList<QPair<QString, DataBlock>>>> m_dataBlockMap;     // 解析json后得到的列表,保持JSON顺序

    // 柜内传感器相关映射
    QMap<QString, bool> m_dataBlockMap_isTempIn;
    QMap<QString, QString> m_dataBlockMap_isTempOut;
    QMap<QString, bool> m_dataBlockMap_isHumIn;
    QMap<QString, QString> m_dataBlockMap_isHumOut;

    // 新增超声波和暂态地电压相关映射
    QMap<QString, bool> m_dataBlockMap_isUltrasonicIn;
    QMap<QString, QString> m_dataBlockMap_isUltrasonicOut;
    QMap<QString, bool> m_dataBlockMap_isTEVIn;
    QMap<QString, QString> m_dataBlockMap_isTEVOut;

    QMap<QString, datablock_manager *> g_dataBlockManagers; // key值是block_id,该map用来管理实例的ui,处理的就是这个
};

#endif // PLUGIN_DATABLOCK_H